package cn.com.huzo.repository.trade;

import cn.com.huzo.model.entities.trade.ProductionInstructionHeaderEntity;
import cn.com.huzo.model.entities.trade.ProductionInstructionLinesSuitStyleNoEntity;
import huzofw.repository.GenericRepository;
import java.util.List;
import java.util.Map;

/**
 * 生产指示书数据访问对象接口。
 *
 * @author 吴旭
 */
public interface ProductionInstructionHeaderRepository extends GenericRepository<ProductionInstructionHeaderEntity, Long> {

    /**
     * 根据给定的标识，取得生产指示书。
     *
     * @param headerId 生产指示书标识
     * @param currentUserId 当前用户
     * @param workFlowId 生产指示书审核工作流标识
     * @return
     */
    ProductionInstructionHeaderEntity fetchByKey(Long headerId, Long currentUserId, Long workFlowId);

    /**
     * 根据款号得到生产指示书
     *
     * @param styleNo 款号
     * @return
     */
    ProductionInstructionHeaderEntity fetchByStyleNo(String styleNo);

    /**
     * 插入生产单明细-产品款号
     *
     * @param itemList
     * @return
     */
    Integer insertSuitStyleNo(List<Map<String, Object>> itemList);

    /**
     * 删除该生产指示书的产品款号
     *
     * @param headerId 生产指示书标识
     * @return
     */
    Integer deleteSuitStyleNo(Long headerId);

    /**
     * 取得该生产指示书款号明细
     *
     * @param headerId 生产指示书标识
     * @return
     */
    List<ProductionInstructionLinesSuitStyleNoEntity> fetchSuitStyleNoByHeaderId(Long headerId);

    /**
     * 设置完成标记
     *
     * @param headerId 生产指示书标识
     * @param overFlag 完成标记
     * @return 影响行数
     */
    Integer setOverFlag(Long headerId, Boolean overFlag);
    
    /**
     * 审核
     *
     * @param headerId 生产指示书标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @return
     */
    Integer doCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode);

    /**
     * 反审
     *
     * @param headerId 生产指示书标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @return
     */
    Integer doUnCheck(Long headerId, Short nodeOrder, Long checkedBy);
    
    /**
     * 根据输入的款号从生产指示书中自动补全剩余的款号
     *
     * @param keyWord 输入的款号(部分款号)
     * @return
     */
    List<String> fetchStyleNoForAutoComplate(String keyWord);
}
